package org.jsola.hr.dto.excel;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.jsola.core.dto.BaseDTO;
import org.jsola.core.validator.Const;
import org.jsola.hr.constant.*;
import org.jsola.hr.constant.convert.*;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.Map;

import static org.jsola.hr.example.EmpInfoExample.M_CONTRACTS_STATUS_ENUM_NOT_MATCH;
import static org.jsola.hr.example.EmpInfoZhiXinRenExample.*;

/**
 * 【员工信息】excel导入对象
 *
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel(description = "【员工信息】excel导入对象")
public class EmpInfoImportZhiXinRenDTO extends BaseDTO {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(notes = N_USER_ID, example = E_USER_ID)
    @Length(max = 32, message = M_USER_ID_MAX)
    @ExcelProperty(value = N_USER_ID)
    private String userId;

    @ApiModelProperty(notes = N_UNION_ID, example = E_UNION_ID)
    @Length(max = 32, message = M_UNION_ID_MAX)
    @ExcelProperty(value = N_UNION_ID)
    private String unionId;

    @ApiModelProperty(notes = N_PRE_JOIN_DEP, example = E_PRE_JOIN_DEP)
    @Length(max = 255, message = M_PRE_JOIN_DEP_MAX)
    @ExcelProperty(value = N_PRE_JOIN_DEP)
    private String preJoinDep;

    @ApiModelProperty(notes = N_PRE_JOIN_POSITION, example = E_PRE_JOIN_POSITION)
    @Length(max = 255, message = M_PRE_JOIN_POSITION_MAX)
    @ExcelProperty(value = N_PRE_JOIN_POSITION)
    private String preJoinPosition;

    @ApiModelProperty(notes = N_NUMBER, example = E_NUMBER)
    @Length(max = 32, message = M_NUMBER_MAX)
    @ExcelProperty(value = "工号")
    private String number;

    @ApiModelProperty(notes = N_NAME, example = E_NAME)
    @Length(max = 50, message = M_NAME_MAX)
    @ExcelProperty(value = "姓名")
    private String name;

    @ApiModelProperty(notes = N_NAME_PINYIN, example = E_NAME_PINYIN)
    @Length(max = 128, message = M_NAME_PINYIN_MAX)
    @ExcelProperty(value = N_NAME_PINYIN)
    private String namePinyin;

    @ApiModelProperty(notes = N_ID_CARD, example = E_ID_CARD)
    @Length(max = 20, message = M_ID_CARD_MAX)
    @ExcelProperty(value = N_ID_CARD)
    private String idCard;

    @ApiModelProperty(notes = N_NATION, example = E_NATION)
    @Length(max = 50, message = M_NATION_MAX)
    @ExcelProperty(value = "民族")
    private String nation;

    @ApiModelProperty(notes = N_BIRTHDAY, example = E_BIRTHDAY)
    @ExcelProperty(value = N_BIRTHDAY)
    private String birthday;

    @ApiModelProperty(notes = N_GENDER, example = E_GENDER, allowableValues = GenderEnum.VALUES_STR)
    @Const(constClass = GenderEnum.class, message = M_GENDER_ENUM_NOT_MATCH)
    @ExcelProperty(value = N_GENDER, converter = GenderEnumConverter.class)
    private Integer gender;

    @ApiModelProperty(notes = N_PHONE, example = E_PHONE, required = true)
    @NotNull(message = M_PHONE_NOT_NULL)
    @Length(max = 11, message = M_PHONE_MAX)
    @ExcelProperty(value = N_PHONE)
    private String phone;

    @ApiModelProperty(notes = N_EMAIL, example = E_EMAIL)
    @Length(max = 64, message = M_EMAIL_MAX)
    @ExcelProperty(value = N_EMAIL)
    private String email;

    @ApiModelProperty(notes = N_EMP_PHOTO, example = E_EMP_PHOTO)
    @Length(max = 255, message = M_EMP_PHOTO_MAX)
    @ExcelProperty(value = N_EMP_PHOTO)
    private String empPhoto;

    @ApiModelProperty(notes = N_HIGHEST_EDUCATION, example = E_HIGHEST_EDUCATION)
    @Length(max = 50, message = M_HIGHEST_EDUCATION_MAX)
    @ExcelProperty(value = N_HIGHEST_EDUCATION)
    private String highestEducation;

    @ApiModelProperty(notes = N_MARITAL_STATUS, example = E_MARITAL_STATUS, allowableValues = EmpMaritalStatus.VALUES_STR)
    @Const(constClass = EmpMaritalStatus.class, message = M_MARITAL_STATUS_ENUM_NOT_MATCH)
    @ExcelProperty(value = "婚姻状况", converter = EmpMaritalStatusConverter.class)
    private Integer maritalStatus;

    @ApiModelProperty(notes = N_BIRTH_STATUS, example = E_BIRTH_STATUS, allowableValues = EmpBirthStatus.VALUES_STR)
    @Const(constClass = EmpBirthStatus.class, message = M_BIRTH_STATUS_ENUM_NOT_MATCH)
    @ExcelProperty(value = "生育状况", converter = EmpBirthStatusConverter.class)
    private Integer birthStatus;

    @ApiModelProperty(notes = N_POLITICAL_STATUS, example = E_POLITICAL_STATUS, allowableValues = EmpPoliticalStatus.VALUES_STR)
    @Const(constClass = EmpPoliticalStatus.class, message = M_POLITICAL_STATUS_ENUM_NOT_MATCH)
    @ExcelProperty(value = "政治面貌", converter = EmpPoliticalStatusConverter.class)
    private Integer politicalStatus;

    @ApiModelProperty(notes = N_PARTY_DATE, example = E_PARTY_DATE)
    @ExcelProperty(value = N_PARTY_DATE)
    private Date partyDate;

    @ApiModelProperty(notes = N_PARTY_SITE, example = E_PARTY_SITE)
    @Length(max = 50, message = M_PARTY_SITE_MAX)
    @ExcelProperty(value = N_PARTY_SITE)
    private String partySite;

    @ApiModelProperty(notes = N_BIRTHPLACE, example = E_BIRTHPLACE)
    @Length(max = 100, message = M_BIRTHPLACE_MAX)
    @ExcelProperty(value = N_BIRTHPLACE)
    private String birthplace;

    @ApiModelProperty(notes = N_NATIVE_LOCATION, example = E_NATIVE_LOCATION)
    @Length(max = 100, message = M_NATIVE_LOCATION_MAX)
    @ExcelProperty(value = "户籍地址")
    private String nativeLocation;

    @ApiModelProperty(notes = N_REG_TYPE, example = E_REG_TYPE, allowableValues = RegTypeEnum.VALUES_STR)
    @Const(constClass = RegTypeEnum.class, message = M_REG_TYPE_ENUM_NOT_MATCH)
    @ExcelProperty(value = "户口类型", converter = RegTypeEnumConverter.class)
    private Integer regType;

    @ApiModelProperty(notes = N_CURRENT_ADDR_ID, example = E_CURRENT_ADDR_ID)
    @Length(max = 32, message = M_CURRENT_ADDR_ID_MAX)
    @ExcelProperty(value = N_CURRENT_ADDR_ID)
    private String currentAddrId;

    @ApiModelProperty(notes = N_CURRENT_LOCATION, example = E_CURRENT_LOCATION)
    @Length(max = 100, message = M_CURRENT_LOCATION_MAX)
    @ExcelProperty(value = "现居住地")
    private String currentLocation;

    @ApiModelProperty(notes = N_COMPANY_ID, example = E_COMPANY_ID, required = true)
    @NotNull(message = M_COMPANY_ID_NOT_NULL)
    @Length(max = 32, message = M_COMPANY_ID_MAX)
    @ExcelProperty(value = N_COMPANY_ID)
    private String companyId;

    @ApiModelProperty(notes = N_BANK_CARD, example = E_BANK_CARD)
    @Length(max = 50, message = M_BANK_CARD_MAX)
    @ExcelProperty(value = "工资卡卡号")
    private String bankCard;

    @ApiModelProperty(notes = N_BANK_NAME, example = E_BANK_NAME)
    @Length(max = 100, message = M_BANK_NAME_MAX)
    @ExcelProperty(value = "银行名称")
    private String bankName;

    @ApiModelProperty(notes = N_BANK_CARD_BRANCH, example = E_BANK_CARD_BRANCH)
    @Length(max = 255, message = "工资卡开户支行")
    @ExcelProperty(value = "")
    private String bankCardBranch;

    @ApiModelProperty(notes = N_BANK_PLACE_ID, example = E_BANK_PLACE_ID)
    @Length(max = 32, message = M_BANK_PLACE_ID_MAX)
    @ExcelProperty(value = N_BANK_PLACE_ID)
    private String bankPlaceId;

    @ApiModelProperty(notes = N_BANK_PLACE, example = E_BANK_PLACE)
    @Length(max = 100, message = M_BANK_PLACE_MAX)
    @ExcelProperty(value = "工资卡开户城市")
    private String bankPlace;

    @ApiModelProperty(notes = N_SOC_TYPE, example = E_SOC_TYPE)
    @ExcelProperty(value = N_SOC_TYPE)
    private Boolean socType;

    @ApiModelProperty(notes = N_IS_FIRST_SOC, example = E_IS_FIRST_SOC)
    @ExcelProperty(value = "是否首次缴纳社保")
    private Boolean isFirstSoc;

    @ApiModelProperty(notes = N_SOC_CARD, example = E_SOC_CARD)
    @Length(max = 60, message = M_SOC_CARD_MAX)
    @ExcelProperty(value = "个人社保卡号")
    private String socCard;

    @ApiModelProperty(notes = N_IS_FIRST_PF, example = E_IS_FIRST_PF)
    @ExcelProperty(value = "是否首次缴纳公积金")
    private Boolean isFirstPf;

    @ApiModelProperty(notes = N_PF_CARD, example = E_PF_CARD)
    @Length(max = 50, message = M_PF_CARD_MAX)
    @ExcelProperty(value = "个人公积金账号")
    private String pfCard;

    @ApiModelProperty(notes = N_HEALTH_CONDITION, example = E_HEALTH_CONDITION)
    @Length(max = 100, message = M_HEALTH_CONDITION_MAX)
    @ExcelProperty(value = N_HEALTH_CONDITION)
    private String healthCondition;

    @ApiModelProperty(notes = N_HAS_WEIGHTY_MEDICAL_HIS, example = E_HAS_WEIGHTY_MEDICAL_HIS)
    @ExcelProperty(value = N_HAS_WEIGHTY_MEDICAL_HIS)
    private Boolean hasWeightyMedicalHis;

    @ApiModelProperty(notes = N_JOB_TITLE, example = E_JOB_TITLE)
    @Length(max = 50, message = M_JOB_TITLE_MAX)
    @ExcelProperty(value = N_JOB_TITLE)
    private String jobTitle;

    @ApiModelProperty(notes = N_JOIN_WORK_DATE, example = E_JOIN_WORK_DATE)
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = N_JOIN_WORK_DATE, converter = DateConverter.class)
    private Date joinWorkDate;

    @ApiModelProperty(notes = N_WORKING_UNIT_NAME, example = E_WORKING_UNIT_NAME)
    @Length(max = 50, message = M_WORKING_UNIT_NAME_MAX)
    @ExcelProperty(value = N_WORKING_UNIT_NAME)
    private String workingUnitName;

    @ApiModelProperty(notes = N_PUTONGHUA_LEVEL, example = E_PUTONGHUA_LEVEL)
    @Length(max = 20, message = M_PUTONGHUA_LEVEL_MAX)
    @ExcelProperty(value = N_PUTONGHUA_LEVEL)
    private String putonghuaLevel;

    @ApiModelProperty(notes = N_SPECIALITY, example = E_SPECIALITY)
    @Length(max = 255, message = M_SPECIALITY_MAX)
    @ExcelProperty(value = N_SPECIALITY)
    private String speciality;

    @ApiModelProperty(notes = N_PRIZE_WINNING, example = E_PRIZE_WINNING)
    @Length(max = 255, message = M_PRIZE_WINNING_MAX)
    @ExcelProperty(value = N_PRIZE_WINNING)
    private String prizeWinning;

    @ApiModelProperty(notes = N_ENGLISH_LEVEL, example = E_ENGLISH_LEVEL)
    @Length(max = 20, message = M_ENGLISH_LEVEL_MAX)
    @ExcelProperty(value = N_ENGLISH_LEVEL)
    private String englishLevel;

    @ApiModelProperty(notes = N_NCRE_LEVEL, example = E_NCRE_LEVEL)
    @Length(max = 20, message = M_NCRE_LEVEL_MAX)
    @ExcelProperty(value = N_NCRE_LEVEL)
    private String ncreLevel;

    @ApiModelProperty(notes = N_TARGET_POST, example = E_TARGET_POST)
    @Length(max = 100, message = M_TARGET_POST_MAX)
    @ExcelProperty(value = N_TARGET_POST)
    private String targetPost;

    @ApiModelProperty(notes = N_ANNEX_ID_CARD, example = E_ANNEX_ID_CARD)
    @Length(max = 2147483647, message = M_ANNEX_ID_CARD_MAX)
    @ExcelProperty(value = N_ANNEX_ID_CARD)
    private String annexIdCard;

    @ApiModelProperty(notes = N_ANNEX_HOUSEHOLD, example = E_ANNEX_HOUSEHOLD)
    @Length(max = 2147483647, message = M_ANNEX_HOUSEHOLD_MAX)
    @ExcelProperty(value = N_ANNEX_HOUSEHOLD)
    private String annexHousehold;

    @ApiModelProperty(notes = N_ANNEX_DIPLOMA, example = E_ANNEX_DIPLOMA)
    @Length(max = 2147483647, message = M_ANNEX_DIPLOMA_MAX)
    @ExcelProperty(value = N_ANNEX_DIPLOMA)
    private String annexDiploma;

    @ApiModelProperty(notes = N_ANNEX_DEGREE, example = E_ANNEX_DEGREE)
    @Length(max = 2147483647, message = M_ANNEX_DEGREE_MAX)
    @ExcelProperty(value = N_ANNEX_DEGREE)
    private String annexDegree;

    @ApiModelProperty(notes = N_ANNEX_PRACTISING, example = E_ANNEX_PRACTISING)
    @Length(max = 2147483647, message = M_ANNEX_PRACTISING_MAX)
    @ExcelProperty(value = N_ANNEX_PRACTISING)
    private String annexPractising;

    @ApiModelProperty(notes = N_ANNEX_MAJOR, example = E_ANNEX_MAJOR)
    @Length(max = 2147483647, message = M_ANNEX_MAJOR_MAX)
    @ExcelProperty(value = N_ANNEX_MAJOR)
    private String annexMajor;

    @ApiModelProperty(notes = N_ANNEX_REWARD, example = E_ANNEX_REWARD)
    @Length(max = 2147483647, message = M_ANNEX_REWARD_MAX)
    @ExcelProperty(value = N_ANNEX_REWARD)
    private String annexReward;

    @ApiModelProperty(notes = N_ANNEX_NO_CRIMINAL, example = E_ANNEX_NO_CRIMINAL)
    @Length(max = 2147483647, message = M_ANNEX_NO_CRIMINAL_MAX)
    @ExcelProperty(value = N_ANNEX_NO_CRIMINAL)
    private String annexNoCriminal;

    @ApiModelProperty(notes = N_ANNEX_BLACK_WHITE_PHOTO, example = E_ANNEX_BLACK_WHITE_PHOTO)
    @Length(max = 2147483647, message = M_ANNEX_BLACK_WHITE_PHOTO_MAX)
    @ExcelProperty(value = N_ANNEX_BLACK_WHITE_PHOTO)
    private String annexBlackWhitePhoto;

    @ApiModelProperty(notes = N_ANNEX_PTH_LEVEL, example = E_ANNEX_PTH_LEVEL)
    @Length(max = 2147483647, message = M_ANNEX_PTH_LEVEL_MAX)
    @ExcelProperty(value = N_ANNEX_PTH_LEVEL)
    private String annexPthLevel;

    @ApiModelProperty(notes = N_ANNEX_ENGLISH_LEVEL, example = E_ANNEX_ENGLISH_LEVEL)
    @Length(max = 2147483647, message = M_ANNEX_ENGLISH_LEVEL_MAX)
    @ExcelProperty(value = N_ANNEX_ENGLISH_LEVEL)
    private String annexEnglishLevel;

    @ApiModelProperty(notes = N_ANNEX_NCRE_LEVEL, example = E_ANNEX_NCRE_LEVEL)
    @Length(max = 2147483647, message = M_ANNEX_NCRE_LEVEL_MAX)
    @ExcelProperty(value = N_ANNEX_NCRE_LEVEL)
    private String annexNcreLevel;

    @ApiModelProperty(notes = N_ANNEX_DRIVING_LICENSE, example = E_ANNEX_DRIVING_LICENSE)
    @Length(max = 2147483647, message = M_ANNEX_DRIVING_LICENSE_MAX)
    @ExcelProperty(value = N_ANNEX_DRIVING_LICENSE)
    private String annexDrivingLicense;

    @ApiModelProperty(notes = N_ANNEX_PERSON_PHOTO, example = E_ANNEX_PERSON_PHOTO)
    @Length(max = 2147483647, message = M_ANNEX_PERSON_PHOTO_MAX)
    @ExcelProperty(value = N_ANNEX_PERSON_PHOTO)
    private String annexPersonPhoto;

    @ApiModelProperty(notes = N_ANNEX_SALARY_CARD, example = E_ANNEX_SALARY_CARD)
    @Length(max = 2147483647, message = M_ANNEX_SALARY_CARD_MAX)
    @ExcelProperty(value = N_ANNEX_SALARY_CARD)
    private String annexSalaryCard;

    @ApiModelProperty(notes = N_ANNEX_SOC_CARD, example = E_ANNEX_SOC_CARD)
    @Length(max = 2147483647, message = M_ANNEX_SOC_CARD_MAX)
    @ExcelProperty(value = N_ANNEX_SOC_CARD)
    private String annexSocCard;

    @ApiModelProperty(notes = N_ANNEX_PF_CARD, example = E_ANNEX_PF_CARD)
    @Length(max = 2147483647, message = M_ANNEX_PF_CARD_MAX)
    @ExcelProperty(value = N_ANNEX_PF_CARD)
    private String annexPfCard;

    @ApiModelProperty(notes = N_ANNEX_LABOR_CONTRACT, example = E_ANNEX_LABOR_CONTRACT)
    @Length(max = 2147483647, message = M_ANNEX_LABOR_CONTRACT_MAX)
    @ExcelProperty(value = N_ANNEX_LABOR_CONTRACT)
    private String annexLaborContract;

    @ApiModelProperty(notes = N_ANNEX_ONB_RESUME, example = E_ANNEX_ONB_RESUME)
    @Length(max = 2147483647, message = M_ANNEX_ONB_RESUME_MAX)
    @ExcelProperty(value = N_ANNEX_ONB_RESUME)
    private String annexOnbResume;

    @ApiModelProperty(notes = N_ANNEX_ONB_CHECKUP, example = E_ANNEX_ONB_CHECKUP)
    @Length(max = 2147483647, message = M_ANNEX_ONB_CHECKUP_MAX)
    @ExcelProperty(value = N_ANNEX_ONB_CHECKUP)
    private String annexOnbCheckup;

    @ApiModelProperty(notes = N_ANNEX_LAST_LEAVE_CERT, example = E_ANNEX_LAST_LEAVE_CERT)
    @Length(max = 2147483647, message = M_ANNEX_LAST_LEAVE_CERT_MAX)
    @ExcelProperty(value = N_ANNEX_LAST_LEAVE_CERT)
    private String annexLastLeaveCert;

    @ApiModelProperty(notes = N_ANNEX_WORK_APPLY, example = E_ANNEX_WORK_APPLY)
    @Length(max = 2147483647, message = M_ANNEX_WORK_APPLY_MAX)
    @ExcelProperty(value = N_ANNEX_WORK_APPLY)
    private String annexWorkApply;

    @ApiModelProperty(notes = N_ANNEX_ADJUST_NOTICE, example = E_ANNEX_ADJUST_NOTICE)
    @Length(max = 2147483647, message = M_ANNEX_ADJUST_NOTICE_MAX)
    @ExcelProperty(value = N_ANNEX_ADJUST_NOTICE)
    private String annexAdjustNotice;

    @ApiModelProperty(notes = N_ANNEX_PERSONAL_CHANGE, example = E_ANNEX_PERSONAL_CHANGE)
    @Length(max = 2147483647, message = M_ANNEX_PERSONAL_CHANGE_MAX)
    @ExcelProperty(value = N_ANNEX_PERSONAL_CHANGE)
    private String annexPersonalChange;

    @ApiModelProperty(notes = N_ANNEX_SOC_TRANSFER, example = E_ANNEX_SOC_TRANSFER)
    @Length(max = 2147483647, message = M_ANNEX_SOC_TRANSFER_MAX)
    @ExcelProperty(value = N_ANNEX_SOC_TRANSFER)
    private String annexSocTransfer;

    @ApiModelProperty(notes = N_ANNEX_PERFORMANCE_REPORT, example = E_ANNEX_PERFORMANCE_REPORT)
    @Length(max = 2147483647, message = M_ANNEX_PERFORMANCE_REPORT_MAX)
    @ExcelProperty(value = N_ANNEX_PERFORMANCE_REPORT)
    private String annexPerformanceReport;

    @ApiModelProperty(notes = N_ANNEX_OTHER_INFOS, example = E_ANNEX_OTHER_INFOS)
    @Length(max = 2147483647, message = M_ANNEX_OTHER_INFOS_MAX)
    @ExcelProperty(value = N_ANNEX_OTHER_INFOS)
    private String annexOtherInfos;

    @ApiModelProperty(notes = N_ANNEX_LEAVE_APPRO, example = E_ANNEX_LEAVE_APPRO)
    @Length(max = 2147483647, message = M_ANNEX_LEAVE_APPRO_MAX)
    @ExcelProperty(value = N_ANNEX_LEAVE_APPRO)
    private String annexLeaveAppro;

    @ApiModelProperty(notes = N_ANNEX_LEAVE_CERT, example = E_ANNEX_LEAVE_CERT)
    @Length(max = 2147483647, message = M_ANNEX_LEAVE_CERT_MAX)
    @ExcelProperty(value = N_ANNEX_LEAVE_CERT)
    private String annexLeaveCert;

    @ApiModelProperty(notes = N_ANNEX_LEAVE_APPLY, example = E_ANNEX_LEAVE_APPLY)
    @Length(max = 2147483647, message = M_ANNEX_LEAVE_APPLY_MAX)
    @ExcelProperty(value = N_ANNEX_LEAVE_APPLY)
    private String annexLeaveApply;

    @ApiModelProperty(notes = N_ANNEX_HANDOVER_TABLE, example = E_ANNEX_HANDOVER_TABLE)
    @Length(max = 2147483647, message = M_ANNEX_HANDOVER_TABLE_MAX)
    @ExcelProperty(value = N_ANNEX_HANDOVER_TABLE)
    private String annexHandoverTable;

    @ApiModelProperty(notes = N_SUPERVISOR, example = E_SUPERVISOR)
    @Length(max = 50, message = M_SUPERVISOR_MAX)
    @ExcelProperty(value = N_SUPERVISOR)
    private String supervisor;

    @ApiModelProperty(notes = N_EMPLOY_TYPE, example = E_EMPLOY_TYPE)
    @ExcelProperty(value = N_EMPLOY_TYPE)
    private Boolean employType;

    @ApiModelProperty(notes = N_INFORMAL_TYPE, example = E_INFORMAL_TYPE)
    @ExcelProperty(value = N_INFORMAL_TYPE)
    private Integer informalType;

    @ApiModelProperty(notes = N_FORMAL_TYPE, example = E_FORMAL_TYPE, allowableValues = FormalTypeEnum.VALUES_STR)
    @Const(constClass = FormalTypeEnum.class, message = M_FORMAL_TYPE_ENUM_NOT_MATCH)
    @ExcelProperty(value = "员工状态", converter = FormalTypeEnumConverter.class)
    private Integer formalType;

    @ApiModelProperty(notes = N_IS_IMPROVE, example = E_IS_IMPROVE)
    @ExcelProperty(value = N_IS_IMPROVE)
    private Boolean isImprove;

    @ApiModelProperty(notes = N_POST_TYPE, example = E_POST_TYPE, allowableValues = PostType.VALUES_STR)
    @Const(constClass = PostType.class, message = M_POST_TYPE_ENUM_NOT_MATCH)
    @ExcelProperty(value = "工作性质", converter = PostTypeConverter.class)
    private Integer postType;

    @ApiModelProperty(notes = N_CONTRACTS_STATUS, example = E_CONTRACTS_STATUS)
    @Const(constClass = ContractStatusEnum.class, message = M_CONTRACTS_STATUS_ENUM_NOT_MATCH)
    @ExcelProperty(value = "合同状态", converter = ContractsStatusConverter.class)
    private String contractsStatus;

    @ApiModelProperty(notes = N_MANAGER_FORM, example = E_MANAGER_FORM)
    @ExcelProperty(value = N_MANAGER_FORM)
    private Integer managerForm;

    @ApiModelProperty(notes = N_WORK_CITY_ID, example = E_WORK_CITY_ID)
    @Length(max = 32, message = M_WORK_CITY_ID_MAX)
    @ExcelProperty(value = N_WORK_CITY_ID)
    private String workCityId;

    @ApiModelProperty(notes = N_WORK_CITY, example = E_WORK_CITY)
    @Length(max = 100, message = M_WORK_CITY_MAX)
    @ExcelProperty(value = N_WORK_CITY)
    private String workCity;

    @ApiModelProperty(notes = N_JOIN_FORM_STATUS, example = E_JOIN_FORM_STATUS)
    @ExcelProperty(value = N_JOIN_FORM_STATUS)
    private Boolean joinFormStatus;

    @ApiModelProperty(notes = N_PRE_JOIN_DATE, example = E_PRE_JOIN_DATE)
    @ExcelProperty(value = N_PRE_JOIN_DATE)
    private Date preJoinDate;

    @ApiModelProperty(notes = N_JOIN_DATE, example = E_JOIN_DATE)
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = "入职日期", converter = DateConverter.class)
    private Date joinDate;

    @ApiModelProperty(notes = N_PROBATION, example = E_PROBATION, allowableValues = ProbationEnum.VALUES_STR)
    @Const(constClass = ProbationEnum.class, message = M_PROBATION_ENUM_NOT_MATCH)
    @ExcelProperty(value = "试用期", converter = ProbationEnumConverter.class)
    private Integer probation;

    @ApiModelProperty(notes = N_PROBATION_DAYS, example = E_PROBATION_DAYS)
    @ExcelProperty(value = N_PROBATION_DAYS)
    private Integer probationDays;

    @ApiModelProperty(notes = N_TURN_STRAIGHT_DATE, example = E_TURN_STRAIGHT_DATE)
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = "转正日期", converter = DateConverter.class)
    private Date turnStraightDate;

    @ApiModelProperty(notes = N_LEAVE_DATE, example = E_LEAVE_DATE)
    @ExcelProperty(value = N_LEAVE_DATE)
    private Date leaveDate;

    @ApiModelProperty(notes = N_LEAVE_REASON, example = E_LEAVE_REASON)
    @Length(max = 255, message = M_LEAVE_REASON_MAX)
    @ExcelProperty(value = N_LEAVE_REASON)
    private String leaveReason;

    @ApiModelProperty(notes = N_CHANGE_STATUS, example = E_CHANGE_STATUS)
    @ExcelProperty(value = N_CHANGE_STATUS)
    private Integer changeStatus;

    @ApiModelProperty(notes = N_VERIFIED, example = E_VERIFIED, allowableValues = VerifiedEnum.VALUES_STR)
    @Const(constClass = VerifiedEnum.class, message = M_VERIFIED_ENUM_NOT_MATCH)
    @ExcelProperty(value = N_VERIFIED, converter = VerifiedEnumConverter.class)
    private Boolean verified;

    @ApiModelProperty(notes = N_STATUS, example = E_STATUS, allowableValues = EmpInfoStatus.VALUES_STR)
    @Const(constClass = EmpInfoStatus.class, message = M_STATUS_ENUM_NOT_MATCH)
    @ExcelProperty(value = N_STATUS, converter = EmpInfoStatusConverter.class)
    private Integer status;

    @ApiModelProperty(notes = N_APPROVAL_STATUS, example = E_APPROVAL_STATUS)
    @ExcelProperty(value = N_APPROVAL_STATUS)
    private Integer approvalStatus;

    @ApiModelProperty(notes = N_JOIN_CITY_CODE, example = E_JOIN_CITY_CODE)
    @Length(max = 50, message = M_JOIN_CITY_CODE_MAX)
    @ExcelProperty(value = N_JOIN_CITY_CODE)
    private String joinCityCode;

    @ApiModelProperty(notes = N_ARCHIVES_NUMBER, example = E_ARCHIVES_NUMBER)
    @Length(max = 80, message = M_ARCHIVES_NUMBER_MAX)
    @ExcelProperty(value = N_ARCHIVES_NUMBER)
    private String archivesNumber;

    @ApiModelProperty(notes = N_JOIN_CITY_NAME, example = E_JOIN_CITY_NAME)
    @Length(max = 100, message = M_JOIN_CITY_NAME_MAX)
    @ExcelProperty(value = N_JOIN_CITY_NAME)
    private String joinCityName;

    @ApiModelProperty(notes = N_ARCHIVES_REMAKE, example = E_ARCHIVES_REMAKE)
    @Length(max = 2147483647, message = M_ARCHIVES_REMAKE_MAX)
    @ExcelProperty(value = N_ARCHIVES_REMAKE)
    private String archivesRemake;

    @ApiModelProperty(notes = N_RECRUIT_CHANNELS, example = E_RECRUIT_CHANNELS)
    @Length(max = 255, message = M_RECRUIT_CHANNELS_MAX)
    @ExcelProperty(value = "渠道来源")
    private String recruitChannels;

    @ApiModelProperty(notes = N_RETIREMENT_STATUS, example = E_RETIREMENT_STATUS)
    @ExcelProperty(value = N_RETIREMENT_STATUS)
    private Boolean retirementStatus;

    @ApiModelProperty(notes = N_RETIREMENT_DATE, example = E_RETIREMENT_DATE)
    @ExcelProperty(value = N_RETIREMENT_DATE)
    private Date retirementDate;

    @ApiModelProperty(notes = N_RETIREMENT_REMARK, example = E_RETIREMENT_REMARK)
    @Length(max = 255, message = M_RETIREMENT_REMARK_MAX)
    @ExcelProperty(value = N_RETIREMENT_REMARK)
    private String retirementRemark;

    @ApiModelProperty(notes = N_BLOOD_GROUP, example = E_BLOOD_GROUP, allowableValues = BloodGroupEnum.VALUES_STR)
    @Const(constClass = BloodGroupEnum.class, message = M_BLOOD_GROUP_ENUM_NOT_MATCH)
    @ExcelProperty(value = "血型", converter = BloodGroupEnumConverter.class)
    private Integer bloodGroup;

    @ApiModelProperty(notes = N_SITE_ID, example = E_SITE_ID, required = true)
    @NotNull(message = M_SITE_ID_NOT_NULL)
    @Length(max = 32, message = M_SITE_ID_MAX)
    @ExcelProperty(value = N_SITE_ID)
    private String siteId;

    @ApiModelProperty(notes = N_GMT_CREATE, example = E_GMT_CREATE, required = true)
    @NotNull(message = M_GMT_CREATE_NOT_NULL)
    @ExcelProperty(value = N_GMT_CREATE)
    private Date gmtCreate;

    @ApiModelProperty(notes = N_CREATE_USER_ID, example = E_CREATE_USER_ID, required = true)
    @NotNull(message = M_CREATE_USER_ID_NOT_NULL)
    @Length(max = 32, message = M_CREATE_USER_ID_MAX)
    @ExcelProperty(value = N_CREATE_USER_ID)
    private String createUserId;

    @ApiModelProperty(notes = N_GMT_MODIFIED, example = E_GMT_MODIFIED, required = true)
    @NotNull(message = M_GMT_MODIFIED_NOT_NULL)
    @ExcelProperty(value = N_GMT_MODIFIED)
    private Date gmtModified;

    @ApiModelProperty(notes = N_MODIFIED_USER_ID, example = E_MODIFIED_USER_ID, required = true)
    @NotNull(message = M_MODIFIED_USER_ID_NOT_NULL)
    @Length(max = 32, message = M_MODIFIED_USER_ID_MAX)
    @ExcelProperty(value = N_MODIFIED_USER_ID)
    private String modifiedUserId;

    @ApiModelProperty(notes = N_IS_VALID, example = E_IS_VALID)
    @ExcelProperty(value = N_IS_VALID)
    private Boolean valid;

    @ApiModelProperty(notes = N_DEP_NAME, example = E_DEP_NAME)
    @ExcelProperty(value = "部门")
    private String depName;

    @ApiModelProperty(notes = N_POSITION_NAME, example = E_POSITION_NAME)
    @ExcelProperty(value = "岗位")
    private String positionName;

    @ApiModelProperty(notes = "合同类型", example = "")
    @ExcelProperty(value = "合同类型")
    private String contractType;

    @ApiModelProperty(notes = "纸质/电子合同", example = "")
    @ExcelProperty(value = "纸质/电子合同")
    private String empContractType;

    @ApiModelProperty(notes = "合同开始时间", example = "")
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = "合同开始时间", converter = DateConverter.class)
    private Date contractStartDate;

    @ApiModelProperty(notes = "合同结束时间", example = "")
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = "合同结束时间", converter = DateConverter.class)
    private Date contractEndDate;

    @ApiModelProperty(notes = "合同期限", example = "")
    @ExcelProperty(value = "合同期限")
    private String contractExpireStr;

    @ApiModelProperty(notes = "渠道名称", example = "")
    @ExcelProperty(value = "渠道名称")
    private String channelName;

    @ApiModelProperty(notes = "行号")
    private Integer row;

    @ApiModelProperty(notes = "标签")
    @ExcelProperty(value = "标签")
    private String tag;

    @ApiModelProperty(notes = "备注")
    @ExcelProperty(value = "备注")
    private String remark;

    @ApiModelProperty(notes = "学历")
    @ExcelProperty(value = "学历")
    private String education;

}

